package com.itheima.service;

import com.alibaba.dubbo.config.annotation.Service;
import com.github.pagehelper.Page;
import com.github.pagehelper.PageHelper;
import com.itheima.dao.*;
import com.itheima.entity.PageResult;
import com.itheima.exceptions.BusinessException;
import com.itheima.pojo.*;
import org.springframework.transaction.annotation.Transactional;

import javax.annotation.Resource;
import java.util.LinkedHashSet;
import java.util.List;
import java.util.Set;

/**
 * @author W.J.Y
 */
@Service(version = "1.0.0",interfaceClass = QuestionnaireManageService.class)
@Transactional
public class QuestionnaireManageServiceImpl implements QuestionnaireManageService{


    @Resource
    private QuestionnaireManageDao questionnaireManageDao;

    /**
     * 查询全部问卷信息
     * @return  全部问卷信息
     */
    @Override
    public List<Questionnaire> findAll() {
        return questionnaireManageDao.findAll();
    }

    /**
     * 添加问卷
     * @param questionnaire  问卷实例
     * @throws BusinessException    可能出现的业务异常
     */
    @Override
    public void add(Questionnaire questionnaire) throws BusinessException {
        Integer count = questionnaireManageDao.findQuestionnaireByName(questionnaire);
        if(count>0){
            throw new BusinessException("已存在相同名称的问卷，添加失败！");
        }
        //首先首先添加问卷
        questionnaireManageDao.add(questionnaire);
        //添加问卷与题目的关联关系
        int questionnaireId = questionnaire.getId();
        Set<Integer> questionIds = questionnaire.getQuestionIds();
        if (questionIds!=null){
            for (Integer questionId : questionIds) {
                questionnaireManageDao.setQuestionnaireAndQuestion(questionnaireId,questionId);
            }
        }
    }


    /**
     * 编辑问卷
     * @param questionnaire  问卷实例
     * @throws BusinessException    可能出现的业务异常
     */
    @Override
    public void update(Questionnaire questionnaire)  throws BusinessException{
        Integer count = questionnaireManageDao.findQuestionnaireByName(questionnaire);
        if(count>0){
            throw new BusinessException("已存在相同名称的问卷，编辑失败！");
        }
        questionnaireManageDao.update(questionnaire);
        int questionnaireId = questionnaire.getId();
        //首先删除问卷与题目的关联关系
        questionnaireManageDao.deleteQuestionnaireAndQuestion(questionnaireId);
        //再添加问卷与题目的关联关系
        Set<Integer> questionIds = questionnaire.getQuestionIds();
        if (questionIds!=null){
            for (Integer questionId : questionIds) {
                questionnaireManageDao.setQuestionnaireAndQuestion(questionnaireId,questionId);
            }
        }
    }

    /**
     * 根据ID删除问卷
     * @param id    问卷ID
     * @throws BusinessException    可能出现的业务异常
     */
    @Override
    public void delete(int id)  throws BusinessException{
        //首先删除问卷和题目的关联
        questionnaireManageDao.deleteQuestionnaireAndQuestion(id);
        //再删除问卷
        questionnaireManageDao.delete(id);
    }

    /**
     * 根据ID查询问卷信息
     * @param id    问卷ID
     * @return  问卷实例
     */
    @Override
    public Questionnaire findById(int id) {
        Questionnaire questionnaire = questionnaireManageDao.findById(id);
        //问卷对应的题目ID
        Set<Integer> questionIds = questionnaireManageDao.findQuestionIdsByQuestionnaireId(id);
        questionnaire.setQuestionIds(questionIds);
        return questionnaire;
    }

    /**
     * 分页查询问卷信息
     * @param currentPage   当前页码
     * @param pageSize  每页条数
     * @param queryString   查询语句
     * @return  分页问卷信息
     */
    @Override
    public PageResult findPage(Integer currentPage, Integer pageSize, String queryString) {
        //开启分页查询
        PageHelper.startPage(currentPage,pageSize);
        //调用dao层查询语句
        Page<Questionnaire> page = questionnaireManageDao.findPage(queryString);
        //封装分页查询结果对象
        return new PageResult(page.getTotal(),page.getResult());
    }
}
